import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
6: K-beauty
부스트코스
가설: K-Beauty는 성장하고 있을까? 해외 직접판매를 한다면 어느 국가로 판매전략을 세우면 좋을까?
- e:추정지, p:잠정치, -:자료없음, …:미상자료, x: 비밀번호
필요 라이브러리 가져오기
# 시각화 위한 폰트 설정
import os
if os.name == "posix":
set(font="AppleGothic")
sns.elif os.name == "nt":
set(font="Malgun Gothic") sns.
# 레티나 설정을 하면 글씨가 좀 더 선명하게 보인ㄷ.
# 폰트의 주변이 흐릿하게 보이는 것을 방지한다.
%config InlineBackend.figure_format = 'retina'
데이터 로드하기
= pd.read_csv("data/국가_대륙_별_상품군별_온라인쇼핑_해외직접판매액_20221122201127.csv", encoding="cp949") df_raw
df_raw.head()
국가(대륙)별 | 상품군별 | 판매유형별 | 2014.1/4 | 2014.2/4 | 2014.3/4 | 2014.4/4 | 2015.1/4 | 2015.2/4 | 2015.3/4 | ... | 2017.3/4 | 2017.4/4 | 2018.1/4 | 2018.2/4 | 2018.3/4 | 2018.4/4 | 2019.1/4 | 2019.2/4 | 2019.3/4 | 2019.4/4 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 합계 | 합계 | 계 | 148272 | 153641 | 163999 | 213216 | 269101 | 271784 | 268421 | ... | 749612 | 858240 | 833672 | 897205 | 921586 | 974060 | 1251122 | 1345723 | 1526135 | 1881628 |
1 | 합계 | 합계 | 면세점 | - | - | - | - | - | - | - | ... | 610630 | 677884 | 665613 | 725319 | 761836 | 770656 | 1070693 | 1157158 | 1336372 | 1655635 |
2 | 합계 | 합계 | 면세점 이외 | - | - | - | - | - | - | - | ... | 138982 | 180356 | 168059 | 171886 | 159750 | 203404 | 180429 | 188565 | 189763 | 225993 |
3 | 합계 | 컴퓨터 및 주변기기 | 계 | 4915 | 4052 | 3912 | 3529 | 2903 | 2697 | 3804 | ... | 2018 | 2158 | 5236 | 3854 | 4320 | 4511 | 3702 | 4038 | 3670 | 3827 |
4 | 합계 | 컴퓨터 및 주변기기 | 면세점 | - | - | - | - | - | - | - | ... | 5 | 1 | 2 | 6 | 1 | 215 | 2 | 0 | 1 | 70 |
5 rows × 27 columns
df_raw.shape
(450, 27)
"국가(대륙)별"].value_counts() df_raw[
합계 45
미국 45
중국 45
일본 45
아세안(ASEAN) 45
유럽연합(EU) 45
중동 45
중남미 45
대양주 45
기타 45
Name: 국가(대륙)별, dtype: int64
# 미국 데이터만 따로 보기
"국가(대륙)별"]== "미국"] df_raw[df_raw[
국가(대륙)별 | 상품군별 | 판매유형별 | 2014.1/4 | 2014.2/4 | 2014.3/4 | 2014.4/4 | 2015.1/4 | 2015.2/4 | 2015.3/4 | ... | 2017.3/4 | 2017.4/4 | 2018.1/4 | 2018.2/4 | 2018.3/4 | 2018.4/4 | 2019.1/4 | 2019.2/4 | 2019.3/4 | 2019.4/4 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
45 | 미국 | 합계 | 계 | 25773 | 22573 | 21288 | 26729 | 39945 | 26654 | 28647 | ... | 41927 | 53209 | 42679 | 40207 | 37631 | 48978 | 40985 | 44973 | 55512 | 54054 |
46 | 미국 | 합계 | 면세점 | - | - | - | - | - | - | - | ... | 9469 | 12177 | 5184 | 3603 | 2317 | 2079 | 2657 | 2951 | 1818 | 1481 |
47 | 미국 | 합계 | 면세점 이외 | - | - | - | - | - | - | - | ... | 32458 | 41032 | 37495 | 36604 | 35314 | 46899 | 38328 | 42022 | 53694 | 52573 |
48 | 미국 | 컴퓨터 및 주변기기 | 계 | 2216 | 1666 | 1776 | 1675 | 1469 | 1393 | 2166 | ... | 791 | 854 | 2033 | 1553 | 1784 | 1774 | 1298 | 1408 | 1653 | 1383 |
49 | 미국 | 컴퓨터 및 주변기기 | 면세점 | - | - | - | - | - | - | - | ... | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
50 | 미국 | 컴퓨터 및 주변기기 | 면세점 이외 | - | - | - | - | - | - | - | ... | 791 | 854 | 2033 | 1553 | 1784 | 1773 | 1298 | 1408 | 1653 | 1383 |
51 | 미국 | 가전·전자·통신기기 | 계 | 2875 | 2758 | 2894 | 3527 | 4397 | 3589 | 2982 | ... | 2575 | 2394 | 1737 | 1716 | 1723 | 1886 | 1845 | 1837 | 3166 | 1787 |
52 | 미국 | 가전·전자·통신기기 | 면세점 | - | - | - | - | - | - | - | ... | 29 | 32 | 65 | 38 | 72 | 52 | 66 | 116 | 107 | 49 |
53 | 미국 | 가전·전자·통신기기 | 면세점 이외 | - | - | - | - | - | - | - | ... | 2546 | 2362 | 1672 | 1678 | 1651 | 1834 | 1779 | 1721 | 3059 | 1738 |
54 | 미국 | 소프트웨어 | 계 | 47 | 57 | 49 | 128 | 182 | 113 | 163 | ... | 37 | 125 | 175 | 251 | 172 | 269 | 88 | 156 | 118 | 338 |
55 | 미국 | 소프트웨어 | 면세점 | - | - | - | - | - | - | - | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
56 | 미국 | 소프트웨어 | 면세점 이외 | - | - | - | - | - | - | - | ... | 37 | 125 | 175 | 251 | 172 | 269 | 88 | 156 | 118 | 338 |
57 | 미국 | 서 적 | 계 | 962 | 720 | 934 | 1006 | 1074 | 837 | 993 | ... | 1876 | 1856 | 2089 | 1790 | 2033 | 1977 | 2259 | 1563 | 2596 | 1720 |
58 | 미국 | 서 적 | 면세점 | - | - | - | - | - | - | - | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
59 | 미국 | 서 적 | 면세점 이외 | - | - | - | - | - | - | - | ... | 1876 | 1856 | 2089 | 1790 | 2033 | 1977 | 2259 | 1563 | 2596 | 1720 |
60 | 미국 | 사무·문구 | 계 | 25 | 10 | 14 | 18 | 568 | 17 | 32 | ... | 30 | 79 | 58 | 55 | 85 | 83 | 198 | 72 | 83 | 101 |
61 | 미국 | 사무·문구 | 면세점 | - | - | - | - | - | - | - | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
62 | 미국 | 사무·문구 | 면세점 이외 | - | - | - | - | - | - | - | ... | 30 | 79 | 58 | 55 | 85 | 83 | 198 | 72 | 83 | 101 |
63 | 미국 | 음반·비디오·악기 | 계 | 787 | 720 | 722 | 821 | 849 | 781 | 827 | ... | 2281 | 2647 | 2362 | 3014 | 3932 | 4550 | 3857 | 5191 | 5762 | 4786 |
64 | 미국 | 음반·비디오·악기 | 면세점 | - | - | - | - | - | - | - | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
65 | 미국 | 음반·비디오·악기 | 면세점 이외 | - | - | - | - | - | - | - | ... | 2281 | 2647 | 2362 | 3014 | 3932 | 4550 | 3857 | 5191 | 5762 | 4786 |
66 | 미국 | 의류 및 패션 관련상품 | 계 | 9810 | 7801 | 6404 | 9208 | 8602 | 6927 | 8055 | ... | 11173 | 14483 | 11815 | 12169 | 10233 | 13658 | 12324 | 13683 | 13368 | 16161 |
67 | 미국 | 의류 및 패션 관련상품 | 면세점 | - | - | - | - | - | - | - | ... | 148 | 129 | 116 | 154 | 134 | 118 | 110 | 115 | 95 | 91 |
68 | 미국 | 의류 및 패션 관련상품 | 면세점 이외 | - | - | - | - | - | - | - | ... | 11025 | 14354 | 11699 | 12015 | 10099 | 13540 | 12214 | 13568 | 13273 | 16070 |
69 | 미국 | 스포츠·레저용품 | 계 | 573 | 539 | 475 | 491 | 541 | 527 | 481 | ... | 874 | 1121 | 1181 | 1439 | 1200 | 1072 | 1152 | 1602 | 3150 | 864 |
70 | 미국 | 스포츠·레저용품 | 면세점 | - | - | - | - | - | - | - | ... | 0 | 0 | 0 | 0 | 1 | 3 | 4 | 0 | 0 | 0 |
71 | 미국 | 스포츠·레저용품 | 면세점 이외 | - | - | - | - | - | - | - | ... | 874 | 1121 | 1181 | 1439 | 1199 | 1069 | 1148 | 1602 | 3150 | 864 |
72 | 미국 | 화장품 | 계 | 3740 | 3713 | 3399 | 4595 | 11223 | 6176 | 7061 | ... | 15997 | 22310 | 13909 | 11219 | 9717 | 15738 | 10817 | 11310 | 13999 | 13494 |
73 | 미국 | 화장품 | 면세점 | - | - | - | - | - | - | - | ... | 9202 | 11913 | 4927 | 3311 | 2028 | 1780 | 2366 | 2647 | 1550 | 1271 |
74 | 미국 | 화장품 | 면세점 이외 | - | - | - | - | - | - | - | ... | 6795 | 10397 | 8982 | 7908 | 7689 | 13958 | 8451 | 8663 | 12449 | 12223 |
75 | 미국 | 아동·유아용품 | 계 | 583 | 546 | 499 | 610 | 1099 | 603 | 619 | ... | 592 | 722 | 766 | 793 | 730 | 1056 | 815 | 1153 | 1702 | 1928 |
76 | 미국 | 아동·유아용품 | 면세점 | - | - | - | - | - | - | - | ... | 1 | 0 | 1 | 0 | 2 | 0 | 0 | 0 | 0 | 0 |
77 | 미국 | 아동·유아용품 | 면세점 이외 | - | - | - | - | - | - | - | ... | 591 | 722 | 765 | 793 | 728 | 1056 | 815 | 1153 | 1702 | 1928 |
78 | 미국 | 음·식료품 | 계 | 381 | 415 | 405 | 673 | 577 | 628 | 631 | ... | 417 | 265 | 277 | 311 | 239 | 278 | 336 | 313 | 602 | 424 |
79 | 미국 | 음·식료품 | 면세점 | - | - | - | - | - | - | - | ... | 89 | 103 | 75 | 100 | 80 | 125 | 111 | 73 | 64 | 70 |
80 | 미국 | 음·식료품 | 면세점 이외 | - | - | - | - | - | - | - | ... | 328 | 162 | 202 | 211 | 159 | 153 | 225 | 240 | 538 | 354 |
81 | 미국 | 농축수산물 | 계 | 94 | 98 | 111 | 160 | 189 | 192 | 193 | ... | 0 | 2 | 1 | 0 | 0 | 33 | 2 | 2 | 7 | 2 |
82 | 미국 | 농축수산물 | 면세점 | - | - | - | - | - | - | - | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
83 | 미국 | 농축수산물 | 면세점 이외 | - | - | - | - | - | - | - | ... | 0 | 2 | 1 | 0 | 0 | 33 | 2 | 2 | 7 | 2 |
84 | 미국 | 생활용품 및 자동차용품 | 계 | 1931 | 1915 | 1815 | 1871 | 6605 | 2189 | 2207 | ... | 2349 | 2276 | 2483 | 2357 | 2150 | 2159 | 2174 | 2410 | 3409 | 3713 |
85 | 미국 | 생활용품 및 자동차용품 | 면세점 | - | - | - | - | - | - | - | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 |
86 | 미국 | 생활용품 및 자동차용품 | 면세점 이외 | - | - | - | - | - | - | - | ... | 2349 | 2276 | 2483 | 2357 | 2150 | 2159 | 2174 | 2410 | 3407 | 3713 |
87 | 미국 | 기 타 | 계 | 1749 | 1615 | 1791 | 1946 | 2570 | 2682 | 2237 | ... | 2935 | 4075 | 3793 | 3540 | 3633 | 4445 | 3820 | 4273 | 5897 | 7353 |
88 | 미국 | 기 타 | 면세점 | - | - | - | - | - | - | - | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
89 | 미국 | 기 타 | 면세점 이외 | - | - | - | - | - | - | - | ... | 2935 | 4075 | 3793 | 3540 | 3633 | 4445 | 3820 | 4273 | 5897 | 7353 |
45 rows × 27 columns
분산과 시각화를 위한 tidy data 만들기
# 컬럼에 있는 데이터를 행으로?
df_raw.melt?
df_raw.columns
Index(['국가(대륙)별', '상품군별', '판매유형별', '2014.1/4', '2014.2/4', '2014.3/4',
'2014.4/4', '2015.1/4', '2015.2/4', '2015.3/4', '2015.4/4', '2016.1/4',
'2016.2/4', '2016.3/4', '2016.4/4', '2017.1/4', '2017.2/4', '2017.3/4',
'2017.4/4', '2018.1/4', '2018.2/4', '2018.3/4', '2018.4/4', '2019.1/4',
'2019.2/4', '2019.3/4', '2019.4/4'],
dtype='object')
=df_raw.melt(id_vars=["국가(대륙)별", "상품군별", "판매유형별"],var_name="기간", value_name="백만원")
df# id_vars:어떤 컬럼이 기준이 되는지? 여러개하려면 리스트 형태로
# variable : 나머지 컬럼값들.. 2014~ var_name 통해서 이름 바꿔줄수 있다.
# value : df_raw.values에 들어가있던 값들이 다 value로 들어가 있따.
df.head()
국가(대륙)별 | 상품군별 | 판매유형별 | 기간 | 백만원 | |
---|---|---|---|---|---|
0 | 합계 | 합계 | 계 | 2014.1/4 | 148272 |
1 | 합계 | 합계 | 면세점 | 2014.1/4 | - |
2 | 합계 | 합계 | 면세점 이외 | 2014.1/4 | - |
3 | 합계 | 컴퓨터 및 주변기기 | 계 | 2014.1/4 | 4915 |
4 | 합계 | 컴퓨터 및 주변기기 | 면세점 | 2014.1/4 | - |
df.shape# 기간이 다 행으로 와서 행이 늘어났다.
(10800, 5)
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10800 entries, 0 to 10799
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 국가(대륙)별 10800 non-null object
1 상품군별 10800 non-null object
2 판매유형별 10800 non-null object
3 기간 10800 non-null object
4 백만원 10800 non-null object
dtypes: object(5)
memory usage: 422.0+ KB
데이터 전처리
기간에서 연도를 분리하기
"기간"]
df[# object : string데이터를 의미
0 2014.1/4
1 2014.1/4
2 2014.1/4
3 2014.1/4
4 2014.1/4
...
10795 2019.4/4
10796 2019.4/4
10797 2019.4/4
10798 2019.4/4
10799 2019.4/4
Name: 기간, Length: 10800, dtype: object
df[“기간”].map?
"연도"] = list(map(lambda x : int(x.split(".")[0]), df["기간"])) df[
# 기간에서 분기만 분리하기
"분기"] = list(map(lambda x : int(x.split(".")[1].split()[0].split("/")[0]), df["기간"])) df[
# (1) "." 을 기준으로 split하고 (["2022", "1/4 p"]) 1번째 인덱스를 취함 -> "1/4 p"
# (2) " " 을 기준으로 split하고 (["1/4", "p"]) 0번째 인덱스를 취함 -> "1/4"
# (3) "/"을 기준으로 split하고 (["1", "4"]) 0번째 인덱스를 취함
# (4) "1"에 int() 형변환 함수를 씌워 int64형으로 변환
df.head()
국가(대륙)별 | 상품군별 | 판매유형별 | 기간 | 백만원 | 연도 | 분기 | |
---|---|---|---|---|---|---|---|
0 | 합계 | 합계 | 계 | 2014.1/4 | 148272 | 2014 | 1 |
1 | 합계 | 합계 | 면세점 | 2014.1/4 | - | 2014 | 1 |
2 | 합계 | 합계 | 면세점 이외 | 2014.1/4 | - | 2014 | 1 |
3 | 합계 | 컴퓨터 및 주변기기 | 계 | 2014.1/4 | 4915 | 2014 | 1 |
4 | 합계 | 컴퓨터 및 주변기기 | 면세점 | 2014.1/4 | - | 2014 | 1 |
금액을 수치데이터로 표현하기 위해 데이터 타입 변경하기
# - 문자를 결측치로 변경하고 float타입으로 변경하기
"백만원"] = df["백만원"].replace("-",pd.np.nan).astype(float)
df["백만원"] df[
C:\Users\Public\Documents\ESTsoft\CreatorTemp\ipykernel_117660\99655999.py:2: FutureWarning: The pandas.np module is deprecated and will be removed from pandas in a future version. Import numpy directly instead.
df["백만원"] = df["백만원"].replace("-",pd.np.nan).astype(float)
0 148272.0
1 NaN
2 NaN
3 4915.0
4 NaN
...
10795 0.0
10796 531.0
10797 1094.0
10798 1.0
10799 1093.0
Name: 백만원, Length: 10800, dtype: float64
df.head()
국가(대륙)별 | 상품군별 | 판매유형별 | 기간 | 백만원 | 연도 | 분기 | |
---|---|---|---|---|---|---|---|
0 | 합계 | 합계 | 계 | 2014.1/4 | 148272.0 | 2014 | 1 |
1 | 합계 | 합계 | 면세점 | 2014.1/4 | NaN | 2014 | 1 |
2 | 합계 | 합계 | 면세점 이외 | 2014.1/4 | NaN | 2014 | 1 |
3 | 합계 | 컴퓨터 및 주변기기 | 계 | 2014.1/4 | 4915.0 | 2014 | 1 |
4 | 합계 | 컴퓨터 및 주변기기 | 면세점 | 2014.1/4 | NaN | 2014 | 1 |
필요없는 데이터 제거하기
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10800 entries, 0 to 10799
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 국가(대륙)별 10800 non-null object
1 상품군별 10800 non-null object
2 판매유형별 10800 non-null object
3 기간 10800 non-null object
4 백만원 7200 non-null float64
5 연도 10800 non-null int64
6 분기 10800 non-null int64
dtypes: float64(1), int64(2), object(4)
memory usage: 590.8+ KB
# 합계 데이터는 따로 구할 수 있으므로 전체 데이터에서 제거한다.
= df[(df["국가(대륙)별"] != "합계") & (df["상품군별"] != "합계")].copy()
df df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 9072 entries, 48 to 10799
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 국가(대륙)별 9072 non-null object
1 상품군별 9072 non-null object
2 판매유형별 9072 non-null object
3 기간 9072 non-null object
4 백만원 6048 non-null float64
5 연도 9072 non-null int64
6 분기 9072 non-null int64
dtypes: float64(1), int64(2), object(4)
memory usage: 567.0+ KB
# 결측치 보기
sum() df.isnull().
국가(대륙)별 0
상품군별 0
판매유형별 0
기간 0
백만원 3024
연도 0
분기 0
dtype: int64
K-Beauty 시각화
전체 상품군 판매액
# 판매유형별 데이터는 일부 기간에는 "계"만 존재하기 때문에
# 판매유형별 == "계" 데이터만 가져와서 봐야지
# 평균값을 구하는 그래프에서 올바른 값을 표현할 수 있다.
=df[df["판매유형별"] == "계"].copy()
df_total df_total.head()
국가(대륙)별 | 상품군별 | 판매유형별 | 기간 | 백만원 | 연도 | 분기 | |
---|---|---|---|---|---|---|---|
48 | 미국 | 컴퓨터 및 주변기기 | 계 | 2014.1/4 | 2216.0 | 2014 | 1 |
51 | 미국 | 가전·전자·통신기기 | 계 | 2014.1/4 | 2875.0 | 2014 | 1 |
54 | 미국 | 소프트웨어 | 계 | 2014.1/4 | 47.0 | 2014 | 1 |
57 | 미국 | 서 적 | 계 | 2014.1/4 | 962.0 | 2014 | 1 |
60 | 미국 | 사무·문구 | 계 | 2014.1/4 | 25.0 | 2014 | 1 |
# 연도, 판매액 lineplot으로 그리기
=df_total, x="연도", y="백만원") sns.lineplot(data
# 연도, 판매액 lineplot으로 그리고 상품군별로 다른 색상으로 표시하기
=df_total, x="연도", y="백만원", hue="상품군별")
sns.lineplot(data=(1.05, 1), loc=2, borderaxespad=0.)
plt.legend(bbox_to_anchor# 오른쪽으로 범례 옮기는거
# 위에 그린 그래프를 자세히 보기 위해 서브플롯으로 표시하기
=df_total, x="연도", y="백만원", hue="상품군별", kind="line", col="상품군별", col_wrap=4) sns.relplot(data
# isin을 사용해 화장품만 제외하고 df_sb이라는 변수에 담기
=df_total[~df_total["상품군별"].isin(["화장품","의류 및 패션 관련상품"])].copy()
df_sub
# 앞에 ~ 물결 표시해ㅜㅈ면 화장품만 빼고...
# 연도별 판매액을 상품군별로 relplot을 활용해 서브플롯으로 그려보기
=df_sub, x="연도", y="백만원", hue="상품군별", col="상품군별", col_wrap=4, kind="line")
sns.relplot(data#kind기본값은 scatter
화장품의 온라인 쇼핑 해외직접판매액
# df_cosmetic이라는 변수에 상품군별이 화장품인 데이터만 가져오기
= df_total[df_total["상품군별"]=="화장품"].copy()
df_cosmetic df_cosmetic.head()
국가(대륙)별 | 상품군별 | 판매유형별 | 기간 | 백만원 | 연도 | 분기 | |
---|---|---|---|---|---|---|---|
72 | 미국 | 화장품 | 계 | 2014.1/4 | 3740.0 | 2014 | 1 |
117 | 중국 | 화장품 | 계 | 2014.1/4 | 32235.0 | 2014 | 1 |
162 | 일본 | 화장품 | 계 | 2014.1/4 | 1034.0 | 2014 | 1 |
207 | 아세안(ASEAN) | 화장품 | 계 | 2014.1/4 | 398.0 | 2014 | 1 |
252 | 유럽연합(EU) | 화장품 | 계 | 2014.1/4 | 937.0 | 2014 | 1 |
"상품군별"].unique() df_cosmetic[
array(['화장품'], dtype=object)
# 연도와 판매액을 lineplot으로 그리고 분기별로 다른 색상으로 표현해 보기
=(15,4))
plt.figure(figsize=df_cosmetic, x="연도", y="백만원", hue="분기") sns.lineplot(data
df_cosmetic.head()
국가(대륙)별 | 상품군별 | 판매유형별 | 기간 | 백만원 | 연도 | 분기 | |
---|---|---|---|---|---|---|---|
72 | 미국 | 화장품 | 계 | 2014.1/4 | 3740.0 | 2014 | 1 |
117 | 중국 | 화장품 | 계 | 2014.1/4 | 32235.0 | 2014 | 1 |
162 | 일본 | 화장품 | 계 | 2014.1/4 | 1034.0 | 2014 | 1 |
207 | 아세안(ASEAN) | 화장품 | 계 | 2014.1/4 | 398.0 | 2014 | 1 |
252 | 유럽연합(EU) | 화장품 | 계 | 2014.1/4 | 937.0 | 2014 | 1 |
# 화장품 판매액에 대한 기간별 금액 데이터 시각화 하기
=(15,4))
plt.figure(figsize=30) #x축 기울기
plt.xticks(rotation=df_cosmetic, x="기간", y="백만원") sns.lineplot(data
# 화장품 판매액에 대한 기간별 금액 데이터 시각화하고 "국가(대륙)별"로 다른 색상으로 표시하기
=(15,4))
plt.figure(figsize=30) #x축 기울기
plt.xticks(rotation=df_cosmetic, x="기간", y="백만원", hue="국가(대륙)별") sns.lineplot(data
# 중국빼고 보기
=(15,4))
plt.figure(figsize=30) #x축 기울기
plt.xticks(rotation=df_cosmetic[df_cosmetic["국가(대륙)별"]!="중국"], x="기간", y="백만원", hue="국가(대륙)별") sns.lineplot(data
# 화장품 판매액에 대한 기간별 금액 데이터를 시각화하고 "판매유형별"로 다른색상으로 표현하기
=(15,4))
plt.figure(figsize=30) #x축 기울기
plt.xticks(rotation= df[df["판매유형별"] != "계"].copy()
df_sub =df_sub, x="기간", y="백만원", hue="판매유형별") sns.lineplot(data
# 화장품 판매액에 대한 기간별 금액 데이터를 시각화하고 "판매유형별"로 다른색상으로 표현하기
=(15,4))
plt.figure(figsize=30) #x축 기울기
plt.xticks(rotation= df[(df["판매유형별"] != "계") & (df["판매유형별"]!="면세점")].copy()
df_sub =df_sub, x="기간", y="백만원", hue="판매유형별", ci=None) sns.lineplot(data
의류 및 패션관련 상품 온라인쇼핑 해외직접판매액
# df_fashion 이라는 변수에 의류 데이터만 가져와 따로 담아두기
= df[(df["상품군별"] == "의류 및 패션 관련상품") & (df["판매유형별"]=="계")].copy()
df_fashion df_fashion.head()
국가(대륙)별 | 상품군별 | 판매유형별 | 기간 | 백만원 | 연도 | 분기 | |
---|---|---|---|---|---|---|---|
66 | 미국 | 의류 및 패션 관련상품 | 계 | 2014.1/4 | 9810.0 | 2014 | 1 |
111 | 중국 | 의류 및 패션 관련상품 | 계 | 2014.1/4 | 12206.0 | 2014 | 1 |
156 | 일본 | 의류 및 패션 관련상품 | 계 | 2014.1/4 | 13534.0 | 2014 | 1 |
201 | 아세안(ASEAN) | 의류 및 패션 관련상품 | 계 | 2014.1/4 | 3473.0 | 2014 | 1 |
246 | 유럽연합(EU) | 의류 및 패션 관련상품 | 계 | 2014.1/4 | 1364.0 | 2014 | 1 |
# 의류 및 패션 관련상품 판매액에 대한 기간별 금액 데이터를 시각화하고
# 국가별로 다른색상으로 표시하기
=(15,4))
plt.figure(figsize=30) #x축 기울기
plt.xticks(rotation=df_fashion, x="기간", y="백만원", hue="국가(대륙)별") sns.lineplot(data
# 의류 및 패션관련 상품 판매엑에 대한 기간별 금액 데이터 시각화
# 판매유형별로 다른 색상 표시
= df[(df["상품군별"] == "의류 및 패션 관련상품") & (df["판매유형별"] != "계")].copy()
df_fashion2
=(15, 4))
plt.figure(figsize=30)
plt.xticks(rotation=df_fashion2, x="기간", y="백만원", hue="판매유형별", ci=None) sns.lineplot(data
데이터 집계하기
# 피봇테이블로 "국가(대륙)별", "연도"별로 합계 금액을 표 형ㅇ태로 구하기
df_fashion.pivot_table?
"판매유형별"].value_counts() df_fashion[
df_fashion.head()
국가(대륙)별 | 상품군별 | 판매유형별 | 기간 | 백만원 | 연도 | 분기 | |
---|---|---|---|---|---|---|---|
66 | 미국 | 의류 및 패션 관련상품 | 계 | 2014.1/4 | 9810.0 | 2014 | 1 |
111 | 중국 | 의류 및 패션 관련상품 | 계 | 2014.1/4 | 12206.0 | 2014 | 1 |
156 | 일본 | 의류 및 패션 관련상품 | 계 | 2014.1/4 | 13534.0 | 2014 | 1 |
201 | 아세안(ASEAN) | 의류 및 패션 관련상품 | 계 | 2014.1/4 | 3473.0 | 2014 | 1 |
246 | 유럽연합(EU) | 의류 및 패션 관련상품 | 계 | 2014.1/4 | 1364.0 | 2014 | 1 |
= df_fashion.pivot_table(index="국가(대륙)별", columns="연도", values="백만원", aggfunc="sum")
result # 기본은 평균으로 되어있음.. aggfunc
result
연도 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 |
---|---|---|---|---|---|---|
국가(대륙)별 | ||||||
기타 | 9683.0 | 7248.0 | 5918.0 | 14387.0 | 23901.0 | 6475.0 |
대양주 | 3392.0 | 2349.0 | 3401.0 | 2266.0 | 2725.0 | 2489.0 |
미국 | 33223.0 | 38066.0 | 48451.0 | 50353.0 | 47875.0 | 55536.0 |
아세안(ASEAN) | 14936.0 | 19639.0 | 24478.0 | 22671.0 | 23068.0 | 31247.0 |
유럽연합(EU) | 4485.0 | 3374.0 | 4899.0 | 3736.0 | 4114.0 | 3694.0 |
일본 | 48960.0 | 57594.0 | 79905.0 | 90584.0 | 136800.0 | 134637.0 |
중국 | 57531.0 | 142339.0 | 190932.0 | 225407.0 | 288848.0 | 330267.0 |
중남미 | 975.0 | 616.0 | 649.0 | 762.0 | 576.0 | 544.0 |
중동 | 1172.0 | 1018.0 | 968.0 | 772.0 | 879.0 | 951.0 |
연산결과를 시각적으로 보기
# 피봇테이블로 구한 결과를 값의 많고 적음에 따라 시각적으로 표현
=(15,4)
plt.figure(figsize="Blues", annot= True, fmt=".0f")
sns.heatmap(result, cmap# annot=true 숫자값 표시
="Blues_r")
sns.heatmap(result, cmap# _r 하면 위에랑 반대로..
전체 상품군별로 온라인쇼핑 해외직접판매액은 증가했을까?
# 위에서 판매유형별 데이터의 "계"만 모은 df_total 변수를 통한 연도별 합계 금액을 시각화 하기
df_total
국가(대륙)별 | 상품군별 | 판매유형별 | 기간 | 백만원 | 연도 | 분기 | |
---|---|---|---|---|---|---|---|
48 | 미국 | 컴퓨터 및 주변기기 | 계 | 2014.1/4 | 2216.0 | 2014 | 1 |
51 | 미국 | 가전·전자·통신기기 | 계 | 2014.1/4 | 2875.0 | 2014 | 1 |
54 | 미국 | 소프트웨어 | 계 | 2014.1/4 | 47.0 | 2014 | 1 |
57 | 미국 | 서 적 | 계 | 2014.1/4 | 962.0 | 2014 | 1 |
60 | 미국 | 사무·문구 | 계 | 2014.1/4 | 25.0 | 2014 | 1 |
... | ... | ... | ... | ... | ... | ... | ... |
10785 | 기타 | 아동·유아용품 | 계 | 2019.4/4 | 193.0 | 2019 | 4 |
10788 | 기타 | 음·식료품 | 계 | 2019.4/4 | 319.0 | 2019 | 4 |
10791 | 기타 | 농축수산물 | 계 | 2019.4/4 | 2.0 | 2019 | 4 |
10794 | 기타 | 생활용품 및 자동차용품 | 계 | 2019.4/4 | 531.0 | 2019 | 4 |
10797 | 기타 | 기 타 | 계 | 2019.4/4 | 1094.0 | 2019 | 4 |
3024 rows × 7 columns
=df_total, x="연도", y="백만원") sns.barplot(data
# 연도별 판매액을 그리고 "국가(대륙)별"로 다른 색상으로 표현하기
=df_total, x="연도", y="백만원", hue="국가(대륙)별") sns.barplot(data
=(15,4))
plt.figure(figsize=df_total, x="연도", y="백만원", hue="국가(대륙)별") sns.lineplot(data
# 연도별 판매액을 그리고 "상품군별"로 다른 색상으로 표현하기
=(15,4))
plt.figure(figsize=df_total, x="연도", y="백만원", hue="상품군별")
sns.lineplot(data=(1.02, 1), loc=2, borderaxespad=0,) plt.legend(bbox_to_anchor